package com.aabte.design2.behavioral.memento.v1;

import lombok.Data;

/**
 * 编辑器中包含了一些可能会随时间变化的重要数据。它还定义了在备忘录中保存
 * 自身状态的方法，以及从备忘录中恢复状态的方法。
 *
 * @author Daniel
 * @version 1.0
 * @date 2020/5/4
 */
@Data
public class Editor {

    private String text;
    private int curX;
    private int curY;
    private int selectionWidth;

    /**
     * 在备忘录中保存当前的状态
     */
    public Snapshot createSnapshot() {
        // 备忘录是不可变的对象；因此原发器会将自身状态作为参数传递给备忘录的构造函数
        return new Snapshot(this, text, curX, curY, selectionWidth);
    }

    public void setCursor(int curX, int curY) {
        this.curX = curX;
        this.curY = curY;
    }
}
